package SparseAarray;
/*
稀疏数组转二维数组以及二维数组转稀疏数组
 */
public class SparseArray {
  public static void main(String[] args) {

//    原始数组
    int array[][] = new int[11][11];
    array[1][2]=1;
    array[2][3]=2;
    System.out.println("原始数组：");
    for (int[] row : array) {
      for (int data : row) {
        System.out.printf("%d\t",data);
      }
      System.out.println();
    }
//    统计不为0的个数
    int sum = 0;
    for (int[] row : array) {
      for (int data : row) {
        if (data != 0){
          sum++;
        }
      }
    }
    System.out.println("数量为："+sum);
//   转为稀疏数组
    int sparseArray[][] = new int[sum+1][3];
    sparseArray[0][0]=11;
    sparseArray[0][1]=11;
    sparseArray[0][2]=sum;
    int count = 0;//用来标识现在是第几个数字
    for (int i = 0; i < array.length; i++) {
      for (int j = 0; j < array.length; j++) {
        if (array[i][j] != 0){
          count++;
          sparseArray[count][0]=i;
          sparseArray[count][1]=j;
          sparseArray[count][2]=array[i][j];
        }
      }
    }
//    输出稀疏数组
    System.out.println("稀疏数组：");
    for (int[] row : sparseArray) {
      for (int data : row) {
        System.out.printf("%d\t",data);
      }
      System.out.println();
    }

    //  稀疏数组转成二维数组
    int array2[][] = new int[sparseArray[0][0]][sparseArray[0][1]];

    for (int i = 1; i < sparseArray.length; i++) {
      array[sparseArray[i][0]][sparseArray[i][1]]=sparseArray[i][2];
    }
    System.out.println("恢复后的数组：");
    for (int[] row : array) {
      for (int data : row) {
        System.out.printf("%d\t",data);
      }
      System.out.println();
    }
  }

}
